package com.zf.runtime;

import java.io.File;
import java.nio.charset.Charset;
import java.util.Arrays;

/**
 * @author Zhou Feng
 */
public class SystemTest {
    public static void main(String[] args) {

        /*
        `--` 之后的参数，都会进入到 args中，如`java -DtestName=lisi -DtestAge=99 -- file1 -file2.txt kkk`：则args中的内容是 `[ "--", "file1", "-file2.txt", "kkk" ]`
            在 IDEA的 `Program arguments`中配置 `-- file1 -file2.txt kkk`即可
         */
        boolean finalDoubleDash = false;
        for (String arg : args) {
            // `--`之后就是参数
            if (arg.startsWith("--")) {
                finalDoubleDash = true;
                continue;
            }
            if (finalDoubleDash) {
                System.out.println(arg);
            }
        }

        /*
         `-D` 参数用于设置JVM系统属性。这些属性可以在运行时通过 System.getProperty(String key) 方法来访问。
            在IDEA的 `VM options`中配置 `-DtestName=lisi -DtestAge=99`即可
         */
        // 获取自定义的JVM系统属性，使用 `java -DtestName=lisi -DtestAge=99` 指定，名称相同时，取最后一个配置的值
        System.out.println(System.getProperty("testName"));
        System.out.println(System.getProperty("testAge"));

        /*
         获取已有的JVM系统属性, 如果使用 `-D` 参数覆盖已有的属性，则会获取到覆盖后的值
         */
        // 当前项目的所在目录的全路径： /路径/项目根目录
        System.out.println(System.getProperty("user.dir"));
        // 用户名
        System.out.println(System.getProperty("user.name"));
        // 用户的主目录
        System.out.println(System.getProperty("user.home"));
        // CPU的体系结构
        System.out.println(System.getProperties().get("os.arch"));
        // System.out.println(System.getProperty("os.arch"));
        // 系统名称
        System.out.println(System.getProperty("os.name"));
        // 系统版本
        System.out.println(System.getProperties().get("os.version"));

        // JVM中的编码，
        // 1、字符流（Reader/Writer）读取和写入文件时会使用 Charset.defaultCharset() 获取默认编码
        // 2、String.getBytes() 默认也是 Charset.defaultCharset() 方法获取编码
        // Charset.defaultCharset() 方法获取编码，其内部先获取"file.encoding"属性指定的编码，如果获取的编码不正确或者获取不到则使用UTF-8
        System.out.println(System.getProperty("file.encoding"));
        System.out.println(Charset.defaultCharset().displayName());

        /*
         获取环境变量
         */
        // 获取环境变量中 Path 的值
        System.out.println(System.getenv().get("Path"));
        // System.out.println(System.getenv("Path"));


        // 换行分隔符 UNIX："\n"; Windows："\r\n"
        System.out.println(System.lineSeparator().replace("\r", "\\r").replace("\n", "\\n"));
        // System.out.println(System.getProperty("line.separator"));

        // 路径分隔符，用来分隔路径：UNIX: ':';  Windows: ';'。如"/usr/tmp:/var/tmp"
        System.out.println(File.pathSeparator);
        // System.out.println(System.getProperty("path.separator"));

        // 文件路径中的目录分隔符：UNIX：'/'; Windows：'\\'。如 "D:\\a\\test.txt"
        System.out.println(File.separator.replace("\\", "\\\\"));
        // System.out.println(System.getProperty("file.separator"));

        // 当前系统时间的毫秒时间戳
        long currentTimeMillis = System.currentTimeMillis();
        System.out.println(currentTimeMillis);

        // 复制数组
        String[] srcArray = Arrays.asList("1", "2", "3", "4").toArray(new String[0]);
        String[] destArray = new String[5];
        int length = Math.min(srcArray.length, destArray.length);
        System.arraycopy(srcArray, 0, destArray, 0, length);
        System.out.println(Arrays.asList(destArray));
    }
}
